#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project ：python_learning 
@File ：原型模式.py
@IDE  ：PyCharm 
@Author ：李涵彬
@Date ：2024/3/1 23:13 
"""

"""
原型模式 (Prototype Pattern)
原型模式是一种创建型设计模式，它通过复制现有对象来创建新对象，而不是通过实例化新对象。这样做可以在运行时动态地创建新对象，避免了昂贵的对象初始化操作。

在 Python 中，原型模式通常通过使用 copy 模块或实现自定义的克隆方法来实现。以下是一个使用 copy 模块的简单示例：

在这个示例中，Prototype 类具有 clone 方法，该方法使用 copy 模块的 deepcopy 函数来创建对象的深拷贝。这使得我们能够复制对象的所有属性，而不仅仅是引用。

客户端代码创建了一个原型对象 original，然后通过克隆方法创建了一个新对象 cloned。修改 cloned 对象的数据不会影响到原始对象。

原型模式适用于对象的创建和初始化过程相对较为复杂、或者需要大量重复的情况。通过克隆现有对象，可以避免重新初始化这些复杂对象。
"""

import copy


class Prototype:
	def __init__(self):
		self._data = None

	def clone(self):
		return copy.deepcopy(self)

	def get_data(self):
		return self._data

	def set_data(self, data):
		self._data = data


# 客户端代码
if __name__ == "__main__":
	original = Prototype()
	original.set_data("Original Data")

	# 克隆对象
	cloned = original.clone()

	print(original.get_data())  # 输出: Original Data
	print(cloned.get_data())  # 输出: Original Data

	# 修改克隆对象的数据
	cloned.set_data("Cloned Data")

	print(original.get_data())  # 输出: Original Data
	print(cloned.get_data())  # 输出: Cloned Data
